Epochal Time Model
https://gyazo.com/f399f9875fcd36ecda288ab416a12ff0
この図、わかりにくくない #??
mrsekut.iconが知らんだけか
Identityがでかいのがわかりにくい
valueを参照してる感じで書けばいいのに、と思った
Are We There Yer?
/http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
2009年のJVMSummitで発表
ClojureのDocs
Clojure - 値と変更: Clojureのアイデンティティと状態に対するアプローチ
こっちの訳の方がいいmrsekut.icon
用語
identity
stateが変化しても同一のもの
immutableである
value
これもimmutableである
state
stateとは、ある時点でのidentityのvalueである
同一のidentityと、複数のvalueの対応付けのこと
valueがimmutableなので、stateもimmutableである
故に、(valueを削除していなければ)いつでも過去のstateを参照できることになる
参照するvalueを切り替えれば、「stateが変わったこと」になる
例
「過去の私」と「現在の私」と言う場合
私はidentity
年齢(1,2,...,20)はそれぞれvalue
状態は(私,1)とか(私, 2)とか
一方でOOPでは
identityとstateが密結合
故に状態を安易に変更できる
これは彼らが使う言語のせいだ。そういった言語では、アイデンティティやオブジェクトと同様に値を扱うためデフォルトで書き換え可能であり、そのため特に卓越したプログラマーでない限り、アイデンティティを作りすぎたり、値にするのが適切なものをアイデンティティにしてしまうのだ。ref
後付けで、DDDのEntityとかも提唱されてきたが、それを表現するツールとしてclassが適切でないだろうことは明らかmrsekut.icon
Entityは、immutableでなことができるはずのclassを、こっちの方がいいからという理由でmutableにしている
良い設計をするために「知識」が必要になる
運用でカバー的
「DDDの知識」がない人はそういう発想をしないほうが普通
ツールが悪い
実際Clojureではどうやってるのか
alter
commute
send
atom, agent
https://gist.github.com/kohyama/6076544
https://jp.quora.com/Clojure作者のリッチ-ヒッキーは-オブジェクト指向言語で
ながすぎ
参考
イミュータブル時代の言語としてのClojure - Qiita
/miyamonz/アイデンティティと状態
/miyamonz-projects/アイデンティティと状態
/miyamonz-projects/Epochal Time Model